//
//  BRTools.h
//  BrezzeSaaS
//
//  Created by IOS on 2021/8/30.
//  Copyright © 2021 Brezze GWG. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import "BRRuleModel.h"
#import "BRCouponModel.h"
NS_ASSUME_NONNULL_BEGIN

@interface BRTools : NSObject

/// 启动时获取默认语言
+ (void)defaultSetLanguage;

/// 获取当前缓存语言
+ (NSString *)br_getLanguage;

/// 请求使用的value
+ (NSString *)br_requstLanguage;

/// 根据语言获取时间格式，默认en @"dd MMM yyyy"
+ (NSString *)br_timeFormatterInLanguage;

/// 当前状态栏的高度
+ (CGFloat)currStatusBarHeight;

/// 判断是否全面屏 
+ (BOOL)isIPhoneX;

///正则判断
+ (BOOL)checkEmail:(NSString *)email;
+ (BOOL)checkInvCode:(NSString *)code;
///正则判断 5 - 15 长度范围
+ (BOOL)checkPhone:(NSString *)phone;
//正则判断 是否数字
+ (BOOL)checkIsNumber:(NSString *)str;
//正则判断 是否数字和字母
+ (BOOL)checkIsNumberABC:(NSString *)str;
+ (BOOL)canInputText:(NSString *)string;
+ (BOOL)canInputText:(NSString *)string hasEmail:(BOOL)hasAt;
//正则判断 是否8位邀请码
+ (BOOL)checkIsInviteCode:(NSString *)str;
// 修改为大写
+ (NSString *)changCharBig:(NSString *)str;
/// 搜索时处理字符串
+ (NSString *)searchString:(NSString *)old new:(NSString *)newStr rang:(NSRange)rang;
/// 屏蔽号码显示
+ (NSString *)hiddenNumStr:(NSString *)str;
///正则判断 4 长度范围
+ (BOOL)checkOTPCode:(NSString *)code;
/// 获取UUIDString
+ (NSString *)getDeviceUUIDStr;
/// 获取当前版本
+ (NSString *)getAppVersion;

/// 反回正在租借的时间 @"HH:mm.ss"
/// @param time 时长s
+ (NSString *)getChargingTime:(NSTimeInterval)time;
/// 根据创建时间算时间差 返回使用时间
+ (NSString *)getDuringTimeFromTimestamp:(NSString *)timestamp formatter:(NSString *)formatterString;
/// 根据传入的时间+ - GMT时间，主要datePick选择日期后被 + - GMT
/// @param anyDate 需要补正的时间
+ (NSDate *)getNowDateFromatAnDate:(NSDate *)anyDate;
/// 根据创建时间算时间差 返回使用时间 用租借中订单详情
+ (NSString *)getDurationTimeInDetail:(NSString *)timestamp formatter:(NSString *)formatterString;
/// 计算获取租借使用时间 
+ (NSString *)getFormatTimeFromDurationTime:(NSInteger)durationTime;
/// 转换成时间
+ (NSString *)getTimeFromTimestamp:(NSInteger)time formatter:(NSString *)formatterStr;
/// 返回 日期带 1st 补充
+ (NSString *)br_timeForMatterDay:(NSInteger)time;

#pragma mark - 时间到毫秒 --
+ (NSString *)rentingTime:(NSString *)timestamp;

#pragma mark - ------- --
/// 获取包含文本的Range
/// @param str 需要查找的字符
/// @param text 文本
+ (NSRange)rangeof:(NSString *)str toStr:(NSString *)text;
/*
 * 生成渐变色图片
 */
+ (UIImage *)gradientImageWithColors:(NSArray *)colors rect:(CGRect)rect;
+ (UIImage *)gradientImageWithColors:(NSArray *)colors rect:(CGRect)rect startPoin:(CGPoint)startPoint endPoint:(CGPoint)endPoint locations:(NSArray *)locations;

+ (UIImage *)gradientHomesShadowImageWithColors:(NSArray *)colors rect:(CGRect)rect;
/*
 * 渐变色Layer
 */
+ (CAGradientLayer *)gradientLayerWithColors:(NSArray *)colors rect:(CGRect)rect startPoin:(CGPoint)startPoint endPoint:(CGPoint)endPoint locations:(NSArray *)locations;
+ (CAGradientLayer *)gradientLayerWithColors:(NSArray *)colors rect:(CGRect)rect startPoin:(CGPoint)startPoint endPoint:(CGPoint)endPoint;
+ (CAGradientLayer *)gradientLayerWithColors:(NSArray *)colors rect:(CGRect)rect locations:(NSArray *)locations;
/// 默认location @[@(0), @(1.0f)]
+ (CAGradientLayer *)gradientLayerWithColors:(NSArray *)colors rect:(CGRect)rect;

/*
 * 渐变色系列数组
 */
/// 蓝色渐变12一样，1主要用于按钮（2个色）
+ (NSArray *)br_gradientBlueColors1;
+ (NSArray *)br_gradientBlueColors2;
+ (NSArray *)br_gradientBlueColors3;
+ (NSArray *)br_gradientBlueColors4;
/// 支付成功失败背景色
+ (NSArray *)br_gradientPaySuccColors1;
+ (NSArray *)br_gradientPayFailColors1;

#pragma mark - other --
/// 获取距离规则文本
/// @param distance 距离 米
+ (NSString *)br_getDistance:(NSInteger)distance;

/// 处理字符串，使其首字母大写
+ (NSString *)capitalizedString:(NSString *)str;

+ (NSAttributedString *)br_addAttBottomLine:(NSString *)str;

/// 复制字符串到粘贴板
/// @param str 复制的内容
+ (void)br_pasteboardString:(NSString *)str;

/// SF-Pro-Display-HeavyItalic 斜体加粗
/// @param font 字号
/// @param bold 加粗
/// @param italic 斜体
+ (UIFont *)br_displayFontWithSize:(UIFont *)font bold:(BOOL)bold itatic:(BOOL)italic;

/// 越南盾格式化
/// @param amount 价格
+ (NSString *)br_amountVND:(NSNumber *)amount;

/// 格式化越南盾金额（支持小数，每3位加一个点）
/// @param amount 金额（可以是整数或小数）
/// @return 格式化后的字符串，例如：3000 -> "3.000"，3000.50 -> "3.000.5"，3000.00 -> "3.000"
+ (NSString *)br_formatVietnameseDong:(CGFloat)amount;

#pragma mark - 位置相关 --
/// 获取全局默认位置（优先从地图获取，如果没有则返回默认位置）
+ (CLLocationCoordinate2D)br_getGlobalLocation;

/// 坐标转换：BD09（百度坐标系）转 GCJ02（火星坐标系）- 用于显示到Google Maps（与H5保持一致）
/// @param bd09Lat BD09纬度
/// @param bd09Lng BD09经度
+ (CLLocationCoordinate2D)br_bd09ToGcj02:(CGFloat)bd09Lat lng:(CGFloat)bd09Lng;

/// 坐标转换：GCJ02（火星坐标系）转 BD09（百度坐标系）- 用于请求接口（与H5保持一致）
/// @param gcj02Lat GCJ02纬度
/// @param gcj02Lng GCJ02经度
+ (CLLocationCoordinate2D)br_gcj02ToBd09:(CGFloat)gcj02Lat lng:(CGFloat)gcj02Lng;

#pragma mark - 通用参数返回 --
/// FAQ列表类型返回
+ (NSString *)strOfType:(NSInteger)type;
/// 订单列表状态
+ (NSString *)strOrderOfType:(NSInteger)type;
/// 支付方式
+ (NSString *)payWith:(NSInteger)type;
/// 支付流水类型
/// @param type 类型流水类型：1-租借 2-租金退款 3-会员 4-会员退款 5-押金 6-押金退款 7-罚金 8-罚金退款 9-添加卡 10-添加卡退款,可用值:1,2,3,4,5,6,7,8,9,10
+ (NSString *)paymentType:(NSInteger)type;
/// 支付返回的支付方式藐视
/// @param type 流水类型：1-租借 2-会员 3-押金 4-报失
+ (NSString *)payType:(NSInteger)type;
/// 租借，退款，删卡操作异常处理
+ (void)br_resultDo:(NSDictionary *)dataDic text:(NSString *)textKey by:(UIViewController *)vc;

/// 使用状态颜色（新接口）：1-使用中 2-已归还 3-已购买(正常流程) 4-已购买(丢失) 5-已购买(超时) 6-其他状态
+ (UIColor *)colorOrderUsingStatus:(NSInteger)usingStatus;
/// 使用状态文字（新接口）：1-使用中 2-已归还 3-已购买(正常流程) 4-已购买(丢失) 5-已购买(超时) 6-其他状态
+ (NSString *)strOrderUsingStatus:(NSInteger)usingStatus;

/// 根据类型和当前语言生成协议URL
/// @param type 0-用户协议 1-隐私政策
+ (NSString *)br_agreementURLWithType:(NSInteger)type;

@end


@interface BRStringTools : NSObject

/// 设置指定长度富文本 行高
+ (NSAttributedString *)br_attLineSpace:(CGFloat)space text:(NSString *)text range:(NSRange)range;
/// 设置指定长度富文本
+ (NSAttributedString *)br_att:(NSString *)text rang:(NSRange)rang textC:(UIColor *)textColor;
+ (NSAttributedString *)br_att:(NSString *)text rang:(NSRange)rang font:(UIFont  *)font;
+ (NSAttributedString *)br_att:(NSString *)text rang:(NSRange)rang textC:(UIColor * _Nullable)textColor font:(UIFont * _Nullable)font;

///抵扣类型：1-金额 2-时间 3-折扣 优惠券类型
+ (NSString *)br_couponsTypeStr:(NSInteger)type;
///抵扣类型：1-金额 2-时间 3-折扣 优惠券类型
+ (NSString *)br_couponsTypeContent:(BRCouponModel *)dto;
/// 优惠券时间json解析
+ (NSString *)br_couponTimeJson:(NSString *)timeJson;
///抵扣类型：1-金额 2-时间 3-折扣 优惠券类型
+ (NSString *)br_couponsTypeContentV2:(BRCouponDeductionModel *)dto;
/// 支付、详情获取对应时长
+ (NSString *)br_couponTypeTime:(BRCouponModel *)dto;
/// 充点卡时间转换
+ (NSString *)br_chargeCardOfTime:(NSInteger )time;

/// 订单状态：0-初始化 1-租借中 2-待支付 3-已完成 4-已取消 5-调查中 6-已退款 7-已报失 8-已购买
+ (UIColor *)colorOrderOfType:(NSInteger)type;
/// 订单状态：0-初始化 1-租借中 2-待支付 3-已完成 4-已取消 5-调查中 6-已退款 7-已报失
+ (NSString *)strOrderOfType:(NSInteger)type;

/// 类型：1-订单分成 2-调整 3-退款
+ (NSString *)br_transactionRecord:(NSInteger)type;
   
///状态: 0-离线 1-在线 2-已迁移 3-待激活,可用值:0,1,2,3
+ (UIColor *)br_stationStateColor:(NSInteger)state;
///状态: 0-离线 1-在线 2-已迁移 3-待激活,可用值:0,1,2,3
+ (NSString *)br_stationStateStr:(NSInteger)state;


/// 状态：0-申请中 1-已结算 2-驳回申请
+ (NSString *)strWithdrawalRecordOfType:(NSInteger)type;
/// 状态：0-申请中 1-已结算 2-驳回申请
+ (UIColor *)colorWithdrawalRecordOfType:(NSInteger)type;

/// 字符串空转
+ (NSString *)br_stringEmpty:(NSString *)str;
/// 计算文本高度
+ (CGFloat)br_textHeightOf:(NSString *)text font:(UIFont *)font conSize:(CGSize)constraintSize;

@end


@interface BRImgTools : NSObject

/// 链接转qrcode
+ (UIImage *)br_qrLink:(NSString *)link;

@end

@interface BRTimeTools : NSObject

+ (NSArray *)br_timeDateHoursMin;

@end

NS_ASSUME_NONNULL_END
